package com.fmm.easy;

public class IntersectingLinkedList {

    /**
     * @param a 第一个链表头
     * @param b 第二个链表头
     * @return 返回两个链表的第一个公共节点
     * */
    public static ListNode getIntersectionNode(ListNode a, ListNode b) {
        // 两个指针
        ListNode ai = a;
        ListNode bi = b;
        // 标识链表 A 和 B 是否已经遍历完
        boolean hasFinishedA = false;
        boolean hasFinishedB = false;
        while (true) {
            if (ai == bi) {
                return ai;
            }
            ai = ai.next;
            bi = bi.next;
            if (ai == null && !hasFinishedA) {
                hasFinishedA = true;
                ai = b;
            }
            if (bi == null && !hasFinishedB) {
                hasFinishedB = true;
                bi = a;
            }
        }
    }

    private static class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
            next = null;
        }
    }

    public static void main(String[] args) {
        ListNode a = new ListNode(2);
        ListNode b = new ListNode(6);
        ListNode c = new ListNode(4);
        ListNode d = new ListNode(1);
        ListNode e = new ListNode(5);
        a.next = b;
        b.next = c;
        d.next = e;
        System.out.println(getIntersectionNode(a, d));
    }
}
